package tool.dialog;

import java.awt.Color;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;

/**rappresenta un TextField abilitato a inglobare solo numeri interi (int). l'utente puo'
 * comunque inserire delle stringhe ma quando il componente perde il focus della tastiera,
 * esso si dipingera' del colore di errore (rosso di default). Se invece viene scritto
 * al suo interno un numero, il TextField assumera' il colore di corretto (verde solitamente).
 * <p>Al contrario di JNumberTextField, questa classe possiede uno stato ben preciso (errore,in correzione,corretto)
 * richiamabile tramite il metodo 
 * 
 * @author koldar
 * @version 1.0
 */
public class JInterpretedNumberTextField extends JNumberTextField implements FocusListener{

	private static final long serialVersionUID = -8376920503917332737L;
	public static final int CORRECT=0;
	public static final int ERROR=1;
	public static final int DEFAULT=2;
	/**rappresenta il colore che lo sfondo del pannello assume quando la stringa contenuta e' un numero*/
	private Color correctColor;
	/**rappresenta lo stato del pannello*/
	private int state;
	
	public JInterpretedNumberTextField(String startstr,Color defaultcolor,Color correctcolor,Color errorcolor){
		super(startstr,defaultcolor,errorcolor);
		this.correctColor=correctcolor;
		this.state=DEFAULT;
		this.addFocusListener(this);
	}
	public JInterpretedNumberTextField(){
		super();
		this.correctColor=Color.GREEN;
		this.state=DEFAULT;
		this.addFocusListener(this);
	}
	
	@Override
	public void focusGained(FocusEvent e) {
		this.setDefaultState();
		this.state=DEFAULT;
	}

	@Override
	public void focusLost(FocusEvent e) {
		this.setBackground(this.isNumber()?this.correctColor:this.getErrorColor());
		this.state=(this.isNumber()?CORRECT:ERROR);
	}
	
	
	
	/**
	 * @return the state
	 */
	public int getState() {
		return state;
	}
	public void setCorrectState(){
		this.setBackground(correctColor);
	}

	/**
	 * @return the correctColor
	 */
	public Color getCorrectColor() {
		return correctColor;
	}

	/**
	 * @param correctColor the correctColor to set
	 */
	public void setCorrectColor(Color correctColor) {
		this.correctColor = correctColor;
	}
	
	

}
